//
// Created by Administrator on 2022/1/2.
//

#ifndef CPP_LEARNING_RB_TEST_HPP
#define CPP_LEARNING_RB_TEST_HPP

#include "../src/rb_tree.h"

#include <iostream>
using namespace std;

namespace RB_TEST{

    template <typename T>
    struct Visit_RRB{
        void operator() ( T& e){
            cout<<e<<" ";
        }
    };



/**
 * 对这样的树进行测试
 *                                                  8
 *                        4                                                        11
 *
 *           2                        6                              9                         12
 *     1           3            5            7                                10
 */


    void bst_test(){
        RBTree<int> bst;
        bst.insert(8);
        bst.insert(4);
        bst.insert(11);
        bst.insert(2);
        bst.insert(6);
        bst.insert(9);
        bst.insert(12);
        bst.insert(1);
        bst.insert(3);
        bst.insert(5);
        bst.insert(7);
        bst.insert(10);

        Visit_RRB<int> visit;
        bst.travIn(visit);
        cout<<endl;

        BinNodePosi(int) node = bst.search(3);
        if(node){
            cout<<node->data<<endl;
        }


        bst.remove(3);
        bst.travIn(visit);
        cout<<endl;
        bst.travPre(visit);
        cout<<endl;

        bst.remove(1);
        bst.travIn(visit);
        cout<<endl;
        bst.travPre(visit);
        cout<<endl;

        bst.remove(6);
        bst.travIn(visit);
        cout<<endl;
        bst.travPre(visit);
        cout<<endl;

        bst.remove(8);
        bst.travIn(visit);
        cout<<endl;
        bst.travPre(visit);
        cout<<endl;

    }
}

#endif //CPP_LEARNING_BIN_NODE_TEST_HPP
